package com.mfn.sportjava.config;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.web.client.RestClient;

import java.time.Duration;

/**
 * @author Anyang
 * @version 1.0.5
 * @date 2025/08/03
 * @description 自定义 Spring AI 使用的 RestClient 的配置类，为 HTTP 请求设置特定的超时时间。
 * 此版本使用 SimpleClientHttpRequestFactory，以确保更广泛的兼容性。
 */
@Configuration
public class RestClientConfig {

    private static final Logger log = LoggerFactory.getLogger(RestClientConfig.class);

    @Value("${spring.ai.openai.chat.options.model}")
    private String modelName;

    /**
     * 连接超时时间：在建立 TCP 连接时等待的最长时间。
     */
    @Value("${spring.ai.openai.chat.connect-timeout:15s}")
    private Duration connectTimeout;

    /**
     * 读取超时时间：在连接建立后，等待服务器发送数据的最长时间。
      */
    @Value("${spring.ai.openai.chat.read-timeout:90m}")
    private Duration readTimeout;

    /**
     * 创建一个定制的 RestClient.Builder bean，Spring AI 的 OpenAiChatClient
     * 会自动检测并使用此配置。
     * @return 配置了特定超时时间的 RestClient.Builder。
     */
    @Bean
    public RestClient.Builder restClientBuilder() {
        log.info("配置自定义 RestClient.Builder，连接超时时间为：{}，读取超时时间为：{}",
                connectTimeout, readTimeout);
        log.info("Spring AI 使用的模型名称为: {}", modelName);
        // 使用 SimpleClientHttpRequestFactory，这是一个兼容性最好的通用客户端工厂
        SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();

        // setConnectTimeout 和 setReadTimeout 方法在 Spring 5.x 中接受 int 类型
        factory.setConnectTimeout((int) connectTimeout.toMillis());
        factory.setReadTimeout((int) readTimeout.toMillis());

        return RestClient.builder()
                .requestFactory(factory);
    }
}
